Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 640d2f1a authored by Hangyu Kuang's avatar Hangyu Kuang Committed by Android (Google) Code Review
Browse files

Merge "Add source and destination fd in TranscodingRequest."

parents 743e105d 34377c32
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -202,9 +202,8 @@ void TranscoderWrapper::reportError(ClientIdType clientId, SessionIdType session
void TranscoderWrapper::start(ClientIdType clientId, SessionIdType sessionId,
                              const TranscodingRequestParcel& request,
                              const std::shared_ptr<ITranscodingClientCallback>& clientCb) {
    queueEvent(Event::Start, clientId, sessionId, [=] {
    queueEvent(Event::Start, clientId, sessionId, [=, &request] {
        media_status_t err = handleStart(clientId, sessionId, request, clientCb);

        if (err != AMEDIA_OK) {
            cleanup();
            reportError(clientId, sessionId, err);
@@ -237,9 +236,8 @@ void TranscoderWrapper::pause(ClientIdType clientId, SessionIdType sessionId) {
void TranscoderWrapper::resume(ClientIdType clientId, SessionIdType sessionId,
                               const TranscodingRequestParcel& request,
                               const std::shared_ptr<ITranscodingClientCallback>& clientCb) {
    queueEvent(Event::Resume, clientId, sessionId, [=] {
    queueEvent(Event::Resume, clientId, sessionId, [=, &request] {
        media_status_t err = handleResume(clientId, sessionId, request, clientCb);

        if (err != AMEDIA_OK) {
            cleanup();
            reportError(clientId, sessionId, err);
@@ -329,12 +327,18 @@ media_status_t TranscoderWrapper::setupTranscoder(

    Status status;
    ::ndk::ScopedFileDescriptor srcFd, dstFd;
    int srcFdInt = request.sourceFd.get();
    if (srcFdInt < 0) {
        status = clientCb->openFileDescriptor(request.sourceFilePath, "r", &srcFd);
        if (!status.isOk() || srcFd.get() < 0) {
            ALOGE("failed to open source");
            return AMEDIA_ERROR_IO;
        }
        srcFdInt = srcFd.get();
    }

    int dstFdInt = request.destinationFd.get();
    if (dstFdInt < 0) {
        // Open dest file with "rw", as the transcoder could potentially reuse part of it
        // for resume case. We might want the further differentiate and open with "w" only
        // for start.
@@ -343,6 +347,8 @@ media_status_t TranscoderWrapper::setupTranscoder(
            ALOGE("failed to open destination");
            return AMEDIA_ERROR_IO;
        }
        dstFdInt = dstFd.get();
    }

    mCurrentClientId = clientId;
    mCurrentSessionId = sessionId;
@@ -354,7 +360,7 @@ media_status_t TranscoderWrapper::setupTranscoder(
        return AMEDIA_ERROR_UNKNOWN;
    }

    media_status_t err = mTranscoder->configureSource(srcFd.get());
    media_status_t err = mTranscoder->configureSource(srcFdInt);
    if (err != AMEDIA_OK) {
        ALOGE("failed to configure source: %d", err);
        return err;
@@ -385,7 +391,7 @@ media_status_t TranscoderWrapper::setupTranscoder(
        }
    }

    err = mTranscoder->configureDestination(dstFd.get());
    err = mTranscoder->configureDestination(dstFdInt);
    if (err != AMEDIA_OK) {
        ALOGE("failed to configure dest: %d", err);
        return err;
+8 −6
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.media;

import android.os.ParcelFileDescriptor;
import android.media.TranscodingSessionPriority;
import android.media.TranscodingTestConfig;
import android.media.TranscodingType;
@@ -35,10 +36,10 @@ parcelable TranscodingRequestParcel {

    /*
     * The filedescrptor of the sourceFilePath. If the source Fd is provided, transcoding service
     * will use this fd instead of calling back to client side to open the sourceFilePath.
     * -1 means not available.
     * will use this fd instead of calling back to client side to open the sourceFilePath. It is
     * client's responsibility to make sure sourceFd is opened from sourceFilePath.
     */
     int sourceFd = -1;
    @nullable ParcelFileDescriptor sourceFd;

    /**
     * The absolute file path of the destination file.
@@ -47,10 +48,11 @@ parcelable TranscodingRequestParcel {

    /*
     * The filedescrptor of the destinationFilePath. If the destination Fd is provided, transcoding
     * service will use this fd instead of calling back to client side to open the sourceFilePath.
     * -1 means not available.
     * service will use this fd instead of calling back to client side to open the
     * destinationFilePath. It is client's responsibility to make sure destinationFd is opened
     * from destinationFilePath.
     */
     int destinationFd = -1;
    @nullable ParcelFileDescriptor destinationFd;

    /**
     * The UID of the client that this transcoding request is for. Only privileged caller could
+3 −2
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ class TranscodingRequest : public TranscodingRequestParcel {
public:
    TranscodingRequest() = default;
    TranscodingRequest(const TranscodingRequestParcel& parcel) { setTo(parcel); }
    TranscodingRequest(const TranscodingRequest& request) { setTo(request); }
    TranscodingRequest& operator=(const TranscodingRequest& request) {
        setTo(request);
        return *this;
@@ -36,9 +37,9 @@ public:
private:
    void setTo(const TranscodingRequestParcel& parcel) {
        sourceFilePath = parcel.sourceFilePath;
        sourceFd = parcel.sourceFd;
        sourceFd = ndk::ScopedFileDescriptor(dup(parcel.sourceFd.get()));
        destinationFilePath = parcel.destinationFilePath;
        destinationFd = parcel.destinationFd;
        destinationFd = ndk::ScopedFileDescriptor(dup(parcel.destinationFd.get()));
        clientUid = parcel.clientUid;
        clientPid = parcel.clientPid;
        clientPackageName = parcel.clientPackageName;